﻿using System;
using System.Text;
using System.Collections.Generic;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Cesave.Domain.PermisosModule.Contracts.Afianzadoras;
using Cesave.Infrastructure.CrossCutting.IoC;
using Cesave.Domain.PermisosModule.Entities;

namespace Cesave.Domain.PermisosModule.Tests.ServicesTests
{
	[TestClass]
	[DeploymentItem("Cesave.Infrastructure.Data.PermisosModule.Mock.dll")]
	[DeploymentItem("Cesave.Infrastructure.Data.PermisosModule.dll")]
	public class AfianzadoraServiceTests
	{

		[TestMethod]
		[ExpectedException(typeof(ArgumentNullException))]
		public void AddAfianzadora_Null_Afianzadora_Throws_ArgumentNullException()
		{
			// Arrange
			IAfianzadoraService service = IoCFactory.Resolve<IAfianzadoraService>();

			// Act
			service.AddAfianzadora(null);
		}

		[TestMethod]
		public void AddAfianzadora_Invoke()
		{
			// Arrange
			IAfianzadoraService service = IoCFactory.Resolve<IAfianzadoraService>();

			var guid = Guid.NewGuid();

			var expected = new Afianzadora
			{
				AfianzadoraGuid = guid,
				AfianzadoraId = 99,
				JuntaGuid = Guid.NewGuid(),
				JuntaId = 2,
				Nombre = "Test",
				Status = true,
			};

			// Act
			service.AddAfianzadora(expected);

			var actual = service.FindAfianzadoraByGuid(guid);

			// Assert
			Assert.IsNotNull(actual);
			Assert.AreEqual(expected.AfianzadoraGuid, actual.AfianzadoraGuid);

			// clean
			service.DeleteAfianzadora(actual);
			Assert.IsNull(service.FindAfianzadoraByGuid(guid));
		}

		[TestMethod]
		[ExpectedException(typeof(ArgumentNullException))]
		public void ChangeAfianzadora_Null_Afianzadora_Throws_ArgumentNullException()
		{
			// Arrange
			IAfianzadoraService service = IoCFactory.Resolve<IAfianzadoraService>();

			// Act
			service.ChangeAfianzadora(null);
		}

		[TestMethod]
		public void ChangeAfianzadora_Invoke()
		{
			// Arrange
			IAfianzadoraService service = IoCFactory.Resolve<IAfianzadoraService>();

			var guid = Guid.NewGuid();

			var expected = new Afianzadora
			{
				AfianzadoraGuid = guid,
				AfianzadoraId = 99,
				Descripcion = "",
				JuntaGuid = Guid.NewGuid(),
				JuntaId = 2,
				Nombre = "Test",
				Status = true,
			};

			service.AddAfianzadora(expected);

			// Act
			expected.Nombre = "Test Afianzadora";
			service.ChangeAfianzadora(expected);

			var actual = service.FindAfianzadoraByGuid(guid);

			// Assert
			Assert.AreEqual(expected, actual);

			// clean
			service.DeleteAfianzadora(actual);
			Assert.IsNull(service.FindAfianzadoraByGuid(guid));
		}

	}
}